#!/bin/bash
# 该脚本用于实现 root 用户在 CentOS 中安装开源版的 redis

# 临时保存并修改语言环境
LANG_temp=$LANG
LANG=zh_CN.UTF-8

# 还原语言环境
function re_lang () {
    # 将语言环境修改回原来的值
    LANG=$LANG_temp
}

# 还原语言环境，并无异常退出
function re_lang_exit () {
    re_lang
    exit 0
}

function success_text () {
    echo -e -n "\033[32m【SUCCESS】\033[0m"
    echo $1
}

function warn_text () {
    echo -e -n "\033[33m【WARN】\033[0m"
    echo $1
}

function error_text () {
    echo -e -n "\033[31m【ERROR】\033[0m"
    echo $1
}

function error_re_lang_exit () {
    echo -e -n "\033[31m【ERROR】\033[0m"
    echo $1
    re_lang_exit
}


# 如果传入的目录不存在，进行目录的创建
function mkdir_404 () {
    if [ ! -d $1 ]; then
        warn_text
        echo "目录 $1 不存在，进行目录的创建..."
        mkdir -p $1
        success_text
        echo "目录 $1 创建成功"
    else
        success_text
	    echo "目录 $1 已存在，无需进行创建."
    fi
}

# Redis 源码版本
redis_version=redis-stable
# Redis 源码解压后所在的目录
redis_output_dir=/opt/apps

# 检查是否安装了 gcc gcc-c++ make，如果没有安装进行安装
need_install=( gcc gcc-c++ make )
for (( i=0; i<${#need_install[*]}; i++ )); do
    is_install=`rpm -q ${need_install[i]} | grep '未安装软件包.*'`
    if [ ${#is_install} -gt 0 ]; then
        wran_text "还未安装 ${need_install[i]}"
	# 安装 redis 源码编译所需的软件
        echo "开始安装 ${need_install[i]}..."
        yum -y install ${need_install[i]} || error_re_lang_exit "安装 ${need_install[i]} 失败"
        success_text "${need_install[i]} 安装成功."
    else
        echo success_text "${need_install[i]} 已安装."
    fi
done

# 下载获取 Redis 开源版本最新稳定版源码压缩包
echo "开始下载获取 Redis 开源版本最新稳定版源码压缩包..."
wget https://download.redis.io/$redis_version.tar.gz || error_re_lang_exit "获取 Redis 源码压缩包失败"
success_text "获取 Redis 源码压缩包成功."

# 解压 Redis 源码压缩包到 /opt/apps 目录中
mkdir_404 $redis_output_dir
tar -zxvf ./$redis_version.tar.gz -C $redis_output_dir || error_re_lang_exit "解压 Redis 源码失败"
success_text "解压 Redis 源码成功."

# 编译 Redis 源码并安装 Redis
echo "开始编译 Redis 源码并安装 Redis"
cd $redis_output_dir/$redis_version
make || error_re_lang_exit "编译 Redis 源码失败"
make install || error_re_lang_exit "Redis 安装失败"
success_text "Redis 安装成功."

echo "Redis 相关可执行命令如下："
ls -l /usr/local/bin | grep 'redis'

# 还原语言环境
re_lang
